<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script src="./js/utils.js"></script>
    <script>
        // 用户输入四个数
        // 1. 是不是四位数
        // 2. 有没有重复的数字
        // 3. 是否包含非数字

        // 用户输入正确后开始和系统的数字进行匹配
        // 规则：数字和位置都对，A+1；数字对，位置不对，B+1

        // 总共10次机会


        start();

        function start() {
            alert('欢迎进入猜数字游戏！');
            let count = 10;  // 10次猜数机会
            // 生成系统的4位数
            const system_random = createSystemRandom();
            while (true) {
                // 提示用户输入四位数
                const user_number = inputUserRandom();
                // 判断两组数的匹配结果
                const result = match(system_random, user_number); // [1, 0]
                alert(`当前匹配结果位：${result[0]}A${result[1]}B`);
                if (result[0] != 4) {
                    count--;
                    if (count <= 0) {
                        alert('你的机会用完了，游戏结束。系统的数为：' + system_random);
                        return;
                    }
                    alert(`你还有${count}次机会。`);
                } else {
                    alert(`恭喜你，猜对了。系统的数为：${system_random}`);
                    return;
                }
            }
        }

        // 判断给定的两组数的匹配结果
        function match(str1, str2) {
            let a = 0;
            let b = 0;
            for (let i = 0; i < str1.length; i++) {
                for (let j = 0; j < str2.length; j++) {
                    if (i == j && str1[i] == str2[j]) {
                        // 进入if，表示数字和位置都对
                        a++;
                    } else if (str1[i] == str2[j]) {
                        // 进入else if，表示数字对，位置不对
                        b++;
                    }
                }
            }
            return [a, b];
        }


        function inputUserRandom() {
            while (true) {
                const user_number = prompt('请输入四位数：');
                // 是否是4位数
                if (user_number.length !== 4) {
                    alert('你输入的不是4位数!');
                } else if (isNaN(Number(user_number)) || !Number.isInteger(user_number - 0)) {
                    // isNaN(Number(user_number)):判断用户输入的是否包含非数字（但是不能排除小数点）
                    // Number.isInteger(user_number - 0)：判断用户输入的是否是整数（可以排除小数点）
                    alert('你输入的包含非数字！')
                } else if (!isRepeat(user_number)) {
                    alert('你输入的内容包含重复数字！');
                } else {
                    // 用户输入的内容格式合法
                    // ...
                    return user_number;
                }
            }
        }


        // 判断给定的字符串是否重复
        function isRepeat(str) {
            for (let i = 0; i < str.length; i++) {
                if (str.indexOf(str[i]) !== str.lastIndexOf(str[i])) {
                    // 进入if，表示重复了
                    return false;
                }
            }
            // 执行到这一行，没有重复
            return true;
        }


        // 生成系统的4位数
        function createSystemRandom() {
            let system_random = '';
            while (system_random.length < 4) {
                const num = getRandom(0, 9);
                if (!system_random.includes(num)) {
                    // 将新生成的随机数，拼接到系统四位数上
                    system_random += num;
                }
            }
            return system_random;
        }


    </script>
</body>

</html>